{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Softmax and temperature scaling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook we will take a look at the softmax function and its behavior for different values of the logits.\n",
    "We will also study the impact of temperature scaling over the final probabilities"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "def softmax(X, scale = 1.0, axis = None):\n",
    "    \"\"\"\n",
    "    Compute the softmax of each element along an axis of X.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    X: ND-Array. Probably should be floats.\n",
    "    scale (optional): float parameter, used as a multiplier\n",
    "        prior to exponentiation. Default = 1.0\n",
    "    axis (optional): axis to compute values along. Default is the\n",
    "        first non-singleton axis.\n",
    "\n",
    "    Returns an array the same size as X. The result will sum to 1\n",
    "    along the specified axis.\n",
    "    \"\"\"\n",
    "\n",
    "    # make X at least 2d\n",
    "    y = np.atleast_2d(X)\n",
    "\n",
    "    # find axis\n",
    "    if axis is None:\n",
    "        axis = next(j[0] for j in enumerate(y.shape) if j[1] > 1)\n",
    "\n",
    "    # multiply y against the theta parameter,\n",
    "    y = y * float(scale)\n",
    "\n",
    "    # exponentiate y\n",
    "    y = np.exp(y)\n",
    "\n",
    "    # take the sum along the specified axis\n",
    "    ax_sum = np.expand_dims(np.sum(y, axis = axis), axis)\n",
    "\n",
    "    # finally: divide elementwise\n",
    "    p = y / ax_sum\n",
    "\n",
    "    # flatten if X was 1D\n",
    "    if len(X.shape) == 1: p = p.flatten()\n",
    "\n",
    "    return p"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate a range of logits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.arange(0, 1, 0.2)\n",
    "logits_1 = x \n",
    "logits_2 = -2*x - 2\n",
    "logits_3 = -3*x + 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are two parameters that you can adjust:\n",
    "- `logits_multiplier`: controlling the magnitudes of the logits\n",
    "- `temperature`: the coefficient used for adjusting the softmax values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise\n",
    "\n",
    "Try out different values for `logits_multiplier` in the range $[1,50]$ and for the `temperature` in the range $[0.1,200]$.\n",
    "What do you notice?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'probas_scaled')"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x216 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "logits_multiplier = 1\n",
    "temperature = 200\n",
    "\n",
    "logits = np.array([logits_1, logits_2, logits_3])* logits_multiplier\n",
    "probas = softmax(logits, scale = 1, axis = 0)\n",
    "probas_scaled = softmax(logits, scale = 1/temperature, axis = 0)\n",
    "\n",
    "plt.figure(figsize=(15,3))\n",
    "plt.subplot(1,3,1)\n",
    "\n",
    "plt.plot(x, logits.T)\n",
    "plt.legend(['logits_1','logits_2','logits_3'])\n",
    "plt.title('logits')\n",
    "\n",
    "plt.subplot(1,3,2)\n",
    "plt.plot(x, probas.T)\n",
    "plt.title('probas')\n",
    "\n",
    "plt.subplot(1,3,3)\n",
    "plt.plot(x, probas_scaled.T)\n",
    "plt.title('probas_scaled')\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
